#ifndef VNAV_FRAMEWORK_MODEL3D_TYPEDEFS_H
#define VNAV_FRAMEWORK_MODEL3D_TYPEDEFS_H

#include "definitions/VNTypeDefs.h"

namespace vnav
{
	namespace model3d
	{
		struct VERTEX3D 
		{
			VNFloat x, y, z;
		};

		struct TEXCOORD2D 
		{
			VNFloat u, v;
		};

		struct NORMAL3D 
		{
			VNFloat x, y, z;
		};

		struct MATERIAL 
		{
			VNString materialName;
			VNUInt textureId;

			VNBool isValid() 
			{
				return !materialName.empty();
			}
		};

		enum FaceType
		{
			FACETYPE_NOT_SUPPORTED = 0,
			FACETYPE_TRIANGLE_WITH_NO_TEXTURE_NO_NORMAL,
			FACETYPE_TRIANGLE_WITH_TEXTURE_NO_NORMAL,
			FACETYPE_TRIANGLE_WITH_NORMAL_NO_TEXTURE,
			FACETYPE_TRIANGLE_WITH_TEXTURE_AND_NORMAL,
			FACETYPE_QUAD_WITH_NO_TEXTURE_NO_NORMAL,
			FACETYPE_QUAD_WITH_TEXTURE_NO_NORMAL,
			FACETYPE_QUAD_WITH_NORMAL_NO_TEXTURE,
			FACETYPE_QUAD_WITH_TEXTURE_AND_NORMAL		
		};

		struct VertexData
		{
			VNFloat vIndex;
			VNFloat tIndex;
			VNFloat nIndex;
			VNBool hasTexture;
			VNBool hasNormal;
		};
	}
}

#endif